package es.efor.ics.gev.model;

import java.lang.reflect.Constructor;

public class PerfilFactory {

	public static final Class PERSONAL = es.efor.ics.gev.model.PerfilPersonal.class;
	public static final Class ORGANIZATIVO = es.efor.ics.gev.model.PerfilOrganizativo.class;
	
	private PerfilFactory() {		
	}
	
	/**
	 * @param nombrePerfil
	 * @return
	 */
	public static Perfil createPerfilPersonal(String nombrePerfil) {
		return create(PERSONAL, nombrePerfil);
	}
	
	/**
	 * @param nombrePerfil
	 * @return
	 */
	public static Perfil createPerfilOrganizativo(String nombrePerfil) {
		return create(ORGANIZATIVO, nombrePerfil);
	}
	
	/**
	 * @param perfil
	 * @param params
	 * @return
	 */
	@SuppressWarnings("unchecked")
	private static Perfil create(Class perfil, final Object... params){
		try {		
			if (params != null) {
				Class[] types = new Class[params.length];
				for (int i = 0; i < params.length; i++) {
					types[i] = params[i].getClass();
				}				
				Constructor constructor = perfil.getConstructor(types);
				return (Perfil) constructor.newInstance(params);
			} else {
				Constructor constructor = perfil.getConstructor();
				return (Perfil) constructor.newInstance();
			}			
		} catch (Exception e) {
			throw new RuntimeException("Couldn't create perfil: " + perfil);
		} 
	}
	
}
